In the field of digital communications, digital information is conveyed from a transmitter to a receiver through a channel. "Channel" is a generalized term that can include many things. For instance, in satellite communication systems, the channel consists of the atmosphere between the earth-bound transmitter and the satellite. In data storage devices, such as magnetic disc drives, the channel includes a storage medium where the signal is stored for some period of time before being delivered to the receiver.
All channels introduce noise into the signals they convey. To detect and sometimes to correct signal errors caused by this channel noise, the art has developed a large number of coding techniques. These coding techniques convert data words formed of a number of data bits, m, into larger code words formed of a number of code bits, n. The additional bits in the code words permit the detection and sometimes the correction of errors in the signals received from the channel.
The ratio of the number of data bits to the number of code bits, m/n, is known as the code rate of the code. In general, the ability to detect and correct errors in a received signal increases as the code rate decreases because a lower code rate means a greater number of additional bits in the code word. However, each additional bit added by the encoder increases the time and energy needed to transmit the signal through the channel. Thus, to minimize the time and energy needed to send the code, the code rate should be maximized. A lower code rate results in more bit crowding, which reduces error rate performance.
In one type of coding, known as non-return-to-zero-inverse (NRZI), every digital one in a code word is represented by a transition in the transmitted signal, and every digital zero is represented by a lack of transitions in the transmitted signal. To allow the receiver to generate a clock signal using a phase lock loop and the received signal, the encoded signal is generally limited so that the number of consecutive zeros is no greater than a maximum number "k". This kind of code is known as a run-length-limited (RLL) code with a "k" constraint. It is also known to limit the number of consecutive ones in an encoded value to limit the effects of inter-symbol interference, which occurs when consecutive transitions in the transmitted signal interfere with each other. Such codes are known as maximum transition run (MTR) codes with an "L" constraint, where L is the maximum number of consecutive transitions allowed in the channel signal. For example, to avoid three or more consecutive transitions, codes with an MTR constraint L=2 can be designed.
Although MTR codes reduce inter-symbol interference, they eliminate a large number of available code words making it difficult and sometimes impossible to implement MTR constraints with high rate codes. MTR codes improve the bit-error rate by eliminating the most error prone patterns, which in turn limits the code rate achievable with a given MTR constraint.
The present invention addresses this and other problems, and offers other advantages over the prior art.